1project('a', 'c') 2 3good = declare_dependency(link_with: static_library('good', 'g.c')) 4bad = declare_dependency(link_args: 'nonexistent.a') 5not_found = dependency('invalid', required: false) 6 7source_set = import('sourceset') 8 9sources = source_set.source_set() 10sources.add(when: 'YES', if_false: ['nope.c']) 11sources.add(when: 'YES1', if_true: files('a.c')) 12subdir('subdir') 13sources.add(when: 'NO', if_true: 'nope.c', if_false: ['f.c']) 14sources.add(when: 'NO', if_true: bad, if_false: ['f.c']) 15 16sources.add(when: 'YES2', if_true: good) 17 18# dependencies as conditions 19sources.add(when: not_found, if_true: 'nope.c') 20 21# test add_all 22sources2 = source_set.source_set() 23sources2.add(when: 'YES1', if_true: 'nope.c') 24sources.add_all(when: 'NO', if_true: sources2) 25 26# test duplicate items 27sources.add(when: 'YES1', if_true: files('a.c')) 28 29conf1 = configuration_data() 30conf1.set10('YES', true) 31conf1.set10('YES1', true) 32conf1.set10('YES2', false) 33conf1.set10('NO', false) 34result1 = sources.apply(conf1) 35 36conf2 = configuration_data() 37conf2.set10('YES', true) 38conf2.set10('YES1', false) 39conf2.set10('YES2', true) 40conf2.set10('NO', false) 41result2 = sources.apply(conf2) 42 43# Each target will recompile the objects 44executable('first', sources: result1.sources(), dependencies: result1.dependencies()) 45executable('second', sources: result2.sources(), dependencies: result2.dependencies()) 46 47# All target will use the same object files 48if meson.is_unity() 49 message('Skipping extraction test because this is a Unity build.') 50else 51 all_objs = static_library('all_objs', sources.all_sources()) 52 executable('first_via_lib', objects: all_objs.extract_objects(result1.sources()), dependencies: result1.dependencies()) 53 executable('second_via_lib', objects: all_objs.extract_objects(result2.sources()), dependencies: result2.dependencies()) 54endif 55